import { defineStore } from "pinia";
import { login } from "@/api/login.js";
import { set_token, remove_token} from "@/api/app.js";
import router from "@/router/index.js";
import { ElMessage } from 'element-plus';

export const loginStore = defineStore("loginStore", {
  // other options...
  state: () => {
    return {
      login_name: "",
      token: "",
      isLogin: false,
    };
  },
  getters: {},
  actions: {
    /**
     * 异步登录函数，用于处理用户登录逻辑
     * @param {Object} login_data - 包含用户登录信息的对象
     * @returns {Promise} - 返回一个Promise对象，用于处理登录结果
     */
    async store_login(login_data) {
      // 调用api接口
      await login(login_data)
        .then((res) => {
          // 根据返回的状态码进行判断
          // 202: 登录失败，提示错误信息
          // 200: 登录成功，更新loginStore内login_name和token，提示登录成功信息
          if (res.data.detail.status === '202'){
            // 显示错误消息
            ElMessage.error(res.data.detail.message);
          }else if (res.data.detail.status === '200'){
            // 更新loginStore内login_name和token
            this.login_name = res.data.detail.data.login_name;
            this.token = res.data.detail.data.access_token;
            // 设置登录状态
            this.isLogin = true;

            // 将token写入cookie
            set_token(res.data.detail.data.access_token);

            // 跳转到首页
            router.push("/index");
            // 显示成功消息
            ElMessage.success(res.data.detail.message);
          }
        })
    },
    /**
     * 用户登出函数，用于处理用户登出逻辑
     * @returns {Promise} - 返回一个Promise对象，用于处理登出结果
     */
    logout() {
      // 清空loginStore内token和login_name
      this.login_name = "";
      this.token = "";

      // 清空cookie内token
      remove_token();

      // 跳转到登录页面
      router.push("/login");

      return Promise.resolve("退出系统");
    },
  },
});
